/*
 * PersistenceHandler.java
 * 
 *  author: Daniel Rudigier
 *    date: 28.05.2008
 * 
 * 
 */
package ocumed.persistenz.mapper;

import java.util.HashMap;
import java.util.List;

import ocumed.domaene.behandlung.DBehandlung;
import ocumed.domaene.behandlung.DMedikamentVerordnung;
import ocumed.domaene.behandlung.DPosition;
import ocumed.domaene.behandlung.DWarteposition;
import ocumed.domaene.dokument.DRezept;
import ocumed.domaene.patientenverwaltung.DPatient;
import ocumed.teams.IBehandlung;
import ocumed.teams.IMediver;
import ocumed.teams.IPatient;
import ocumed.teams.IPersistence;
import ocumed.teams.IPosition;
import ocumed.teams.IRezept;
import ocumed.teams.IWarteposition;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author Daniel Rudigier
 *
 */
public class PersistenceHandler implements IPersistence {
    private static final Log log = LogFactory.getLog(PersistenceHandler.class);
    private HashMap<Class, PersistenceMapper> mapper = new HashMap<Class, PersistenceMapper>(); 
    
    /**
     * constructor
     * 
     */
    public PersistenceHandler() {
        mapper.put(DWarteposition.class, new WartepositionMapper());
        mapper.put(IWarteposition.class, new WartepositionMapper());
        mapper.put(DRezept.class, new RezeptMapper());
        mapper.put(IRezept.class, new RezeptMapper());
        mapper.put(DPatient.class, new PatientMapper());
        mapper.put(IPatient.class, new PatientMapper());
        mapper.put(DPosition.class, new PositionMapper());
        mapper.put(IPosition.class, new PositionMapper());
        mapper.put(DBehandlung.class, new BehandlungMapper());
        mapper.put(IBehandlung.class, new BehandlungMapper());
        mapper.put(DMedikamentVerordnung.class, new MediverMapper());
        mapper.put(IMediver.class, new MediverMapper());
        // add more mappers here...
    }

    /**
     * override
     *
     * @see ocumed.teams.IPersistence#delete(java.lang.Object)
     */
    public void delete(Object instance) {
        PersistenceMapper worker = mapper.get(instance.getClass());
        worker.delete(instance);
    }

    /**
     * override
     *
     * @see ocumed.teams.IPersistence#get(int, java.lang.Class)
     */
    public Object get(int id, Class c) {
        PersistenceMapper worker = mapper.get(c);            
        return worker.get(id);
    }

    /**
     * override
     *
     * @see ocumed.teams.IPersistence#getAll(java.lang.Class)
     */
    public List getAll(Class c) {
        log.debug("lookup mapper for: " + c.getName());
        PersistenceMapper worker = mapper.get(c);
        return worker.getAll();
    }

    /**
     * override
     *
     * @see ocumed.teams.IPersistence#put(java.lang.Object)
     */
    public void put(Object instance) {
        log.debug("lookup mapper for: " + instance.getClass());
        PersistenceMapper worker = mapper.get(instance.getClass());
        worker.put(instance);
    }


    /**
     * @param patient
     * @return
     */
    /*
    private OcPatient getPatientRep(IPatient patient) {
        OcPatient ret = new OcPatient();
        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        c1.setTime(patient.getGeandertam());
        c2.setTime(patient.getPatientgebdatum());
        
        ret.setPatientid(patient.getPatientid());
        ret.setGeandertam(c1);
        ret.setOcBenutzerByArztid(getBenutzerRep(patient.getiBenutzerByArztid()));
        ret.setOcBenutzerByGeandertvonid(getBenutzerRep(patient.getiBenutzerByGeandertvonid()));
        ret.setOcOrt(getOrtRep(patient.getiOrt()));
        ret.setPatientadresse(patient.getPatientadresse());
        ret.setPatientanrede(patient.getPatientanrede());
        ret.setPatientbesitztecard(patient.getPatientbesitztecard());
        ret.setPatientemail(patient.getPatientemail());
        ret.setPatientfax(patient.getPatientfax());
        ret.setPatientgebdatum(c2);
        ret.setPatientgeschlecht(patient.getPatientgeschlecht());
        ret.setPatientnachname(patient.getPatientnachname());
        ret.setPatientsvn(patient.getPatientsvn());
        ret.setPatienttel(patient.getPatienttel());
        ret.setPatientvorname(patient.getPatientvorname());        
        return ret;
    }
    */

    /**
     * @param getiOrt
     * @return
     */
    /*
    private OcOrt getOrtRep(IOrt ort) {
        if (ort == null) {
            return null;
        }
        OcOrt ret = new OcOrt();
        ret.setOrtid(ort.getOrtid());
        ret.setOcLand(getLandRep(ort.getLand()));
        ret.setOrtname(ort.getOrtname());
        ret.setOrtplz(ort.getOrtplz());        
        return ret;
    }
    */

    /**
     * @param land
     * @return
     */
    /*
    private OcLand getLandRep(ILand land) {
        if (land == null) {
            return null;
        }
        
        OcLand ret = new OcLand();
        ret.setLandid(land.getLandid());
        ret.setLandkurzform(land.getLandkurzform());
        ret.setLandname(land.getLandname());        
        return ret;
    }
    */

    /**
     * @param benutzer
     * @return
     */
    /*
    private OcBenutzer getBenutzerRep(IBenutzer benutzer) {
        if (benutzer == null) {
            return null;
        }
        
        OcBenutzer ret = new OcBenutzer();
        ret.setBenutzerid(benutzer.getBenutzerid());
        ret.setBenutzernachname(benutzer.getBenutzernachname());
        ret.setBenutzerpasswort(benutzer.getBenutzerpasswort());
        ret.setBenutzerstatus(benutzer.getBenutzerstatus());
        ret.setBenutzerusername(benutzer.getBenutzerusername());
        ret.setBenutzervorname(benutzer.getBenutzervorname());
        return ret;
    }
    */

}
